<?php

/**
 * Permite hacer operaciones con la tabla tipomulta de la base de datos
 * @package simertweb 
 * @subpackage models 
 * @category Administración
 * @author Grecia Espinoza <mrcl2587@gmail.com>
 * @author Juan Maldonado  <jgmaldonadoj@gmail.com>
 * @version 1.0  
 */
class Mconfiguracion_multas extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->model('mhistorico');
    }

    /**
     * Obtiene los tipos de multa
     * @return type array
     */
    function listar_costos() {
        $query = $this->db->get('tipomulta');
        return $query->result();
    }

    /**
     * Guarda un nuevo tipo de multa
     */
    function guardar_costos() {
        $razon = $_POST['l16a30'];
        $valor = $_POST['i16a30'];
        for ($i = 0; $i < strlen($razon); $i++) {
            if (is_numeric($razon[$i])) {
                if (!isset($num)) {
                    $num = $razon [$i];
                } else {
                    $num = $num . $razon[$i];
                }

                if (!is_numeric($razon[$i + 1])) {
                    if (!isset($fin)) {
                        $inicio = $num;
                    }
                    $fin = $num;
                    $num = NULL;
                }
            }
        }
        if (!isset($fin)) {
            $fin = 0;
        }
        if (!isset($inicio)) {
            $inicio = 0;
        }
        mysql_query("INSERT INTO `simert`.`tipomulta` (`idTipoMulta`, `razon`, `valor`, `desde`, `hasta`, `habilitado`) VALUES (NULL, '$razon', '$valor', '$inicio', '$fin', '1');");
        $this->mhistorico->guardar_acceso($this->obtener_id($razon), "Creación de tipo de multa");
    }

    /**
     * Obtiene el id del tipo de multa
     * @param type $razon es la descripción de la multa
     * @return type int
     */
    function obtener_id($razon) {
        $this->db->where('razon', $razon);
        $query = $this->db->get('tipomulta')->row()->idTipoMulta;
        return $query;
    }

    /**
     * Obtiene un tipo de multa
     * @param type $id_TipoMulta es el id del tipo de multa
     * @return type array
     */
    function obtener_tipo_multa($id_TipoMulta) {
        $this->db->where('TipoMulta_idTipoMulta', $id_TipoMulta);
        $tipomulta = $this->db->get('tipomulta')->result();
        return $tipomulta;
    }

    /**
     * Obtiene el estaddo del tipo de multa(habilitado o inhabilitado)
     * @param type $id_TipoMulta es el id del tipo de multa
     * @return type array
     */
    function obtener_estado($id_TipoMulta) {
        $this->db->where('idTipoMulta', $id_TipoMulta);
        $tipomulta = $this->db->get('tipomulta')->row();
        return $tipomulta->habilitado;
    }

    /**
     * Habilita o inhabilita un tipo de multa
     */
    function habilitar_deshabilitar() {
        foreach ($_POST['habilitado'] as $id) {
            $estado = $this->obtener_estado($id);
            if ($estado == 1) {
                $estado = 0;
            } else {
                if ($estado == 0) {
                    $estado = 1;
                }
            }
            $data = array(
                'habilitado' => $estado
            );
            $this->db->where('idTipoMulta', $id);
            $this->db->update('tipomulta', $data);
            if ($estado == 0) {
                $this->mhistorico->guardar_acceso($id, "Deshabilitación de una multa");
            } else {
                $this->mhistorico->guardar_acceso($id, "Habilitación de una multa");
            }
        }
    }

    /**
     * Verifica que el tipo de multa exista en el sistema
     * @return boolean
     */
    function validar_razon() {
        $this->db->where('razon', $_POST['l16a30']);
        $this->db->where('habilitado', 1);
        $dato = $this->db->get('tipomulta')->num_rows();
        if ($dato > 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    /**
     * Obtiene la lista de tipos de multas habilitados
     * @return type array
     */
    function listar_habilitadas() {
        $this->db->where('habilitado', 1);
        $dato = $this->db->get('tipomulta');
        return $dato->result();
    }

    /**
     * Verifica que el costo de la multa sea correcta
     * @return boolean
     */
    function control_valor() {
        $razon = $_POST['l16a30'];
        for ($i = 0; $i < strlen($razon); $i++) {
            if (is_numeric($razon[$i])) {
                if (!isset($num)) {
                    $num = $razon [$i];
                } else {
                    $num = $num . $razon[$i];
                }
                if (!is_numeric($razon[$i + 1])) {
                    if (!isset($fin)) {
                        $inicio = $num;
                    }
                    $fin = $num;
                    $num = NULL;
                }
            } else {
                return TRUE;
            }
        }
        if ($inicio < $fin) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    /**
     * Verifica que el tipo de multa por exceso de tiempo se correcta 
     * @return boolean
     */
    function validar_intervalo() {
        $razon = $_POST['l16a30'];
        for ($i = 0; $i < strlen($razon); $i++) {
            if (is_numeric($razon[$i])) {
                if (!isset($num)) {
                    $num = $razon [$i];
                } else {
                    $num = $num . $razon[$i];
                }

                if (!is_numeric($razon[$i + 1])) {
                    if (!isset($fin)) {
                        $inicio = $num;
                    }
                    $fin = $num;
                    $num = NULL;
                }
            } else {
                return TRUE;
            }
        }
        $query = $this->listar_habilitadas();
        foreach ($query as $obj) {
            if ($inicio >= $obj->desde && $inicio <= $obj->hasta || $fin >= $obj->desde && $fin <= $obj->hasta) {
                return FALSE;
            }
        }
    }

}

?>
